/* ************************************************************************
> File Name:     3.c
> Author:        zhfu
> mail:          3346897597@qq.com
> Created Time:  2022年05月09日 星期一 21时58分42秒
> Description:   
 ************************************************************************/
#include<stdlib.h>
#include<unistd.h>
#include<stdio.h>
#define MAXLINE 80

/*
 *从子进程读父进程写但是不把子进程的写端口关闭，如果父进程现写入管道，子进程的第一个read调用成功读取，
 *然后执行下一个read调用，但是父进程已经不再往管道写了，结束了，所以子进程就一直阻塞等待
 *父进程结束，shell重新开始运行，打印出命令行提示符，用ps u命令可以发现子进程还在阻塞等待
 */
int main(void)
{
    int n;
    int fd[2];
    pid_t pid;
    char line[MAXLINE];

    if (pipe(fd) < 0){
        perror("pipe");
        exit(1);
    }

    if ((pid = fork()) < 0){
        perror("fork");
        exit(1);
    }
    if (pid > 0){
        close(fd[0]);
        write(fd[1], "hello world\n", 12);
    }
    if (pid == 0){
        //close(fd[1]);
        n = read(fd[0], line, MAXLINE);
        n = read(fd[0], line, MAXLINE);
        write(STDOUT_FILENO, line, n);
    }

    return 0;
}
